怎么用指针p表示数组中元素 a[2][3] ?

来源:百度知道 编辑:UC知道 时间:2024/05/14 19:48:16
代码:
#include "stdafx.h"
#include "iostream"
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
int a[3][4];
int b=0;
int *p;
int *q;
for(int i=0;i<3;i++){
for(int t=0;t<4;t++)
{
b++;
a[i][t]=b;
}
}
p=&a[0][0];
q=&a[0][0];

cout
<<"\n*((p+2)+3) is:"<<*((p+2)+3)<<"\n*(a[2]+3) is:"<<
*(a[2]+3)<<"\n*(*(a+2)+3) is:"<<*(*(a+2)+3)
<<"\n*(*(p+2)+3)is:"
<<*(*(p+2)+3) //出现错误。错误提示:错误 //error C2100: 非法的间接寻址
<<endl;
for(int i=0;i<3;i++)
for(int t=0;t<4;t++)
cout<<a[i][t]<<endl;
return 0;
}

*(*(p+2)+3)

改为

*(p+2*4+3)

数组元素在内存中是顺序存储的,而数组a[3][4]的存储映射函数是

a[i][j] 等价于 *(&a[0][0]+4*i+j)

而p=&a[0][0],所以a[2][3] 等价于 *(p+2*4+3)

可以这样表示:*(p+3+4*2)

#include "iostream"
using namespace std;

int main()
{
int a[3][4];
int b=0;
int (*p)[4];
int *q;
for(int i=0;i<3;i++){
for(int t=0;t<4;t++)
{
b++;
a[i][t]=b;
}
}
p=&a[0];
q=&a[0][0];

cout
<<"\n*(*(p+2)+3) is:"<<*(*(p+2)+3)<<"\n*(a[2]+3) is:"
<<*(a[2]+3)<<"\n*(*(a+2)+3) is:"<<*(*(a+2)+3)
<<"\n*£¨*(p+2)+3£©is:"
<<*(*(p+2)+3) //³öÏÖ´íÎó¡£´íÎóÌáʾ£º´íÎó //error C2100: ·Ç·¨µÄ¼ä½ÓÑ°Ö·
<<endl;

怎么用指针p表示数组中元素 a[2][3] ? C语言中 设 int a[]={1,2,3,4,5}, *p=a 则数组元素的正确表示是() C语言:用指针方法,交换数组A和数组B的对应元素。 用指针可有几种表示数组元素的方法,试简述三种方法的使用方法 用指针表示一个二维数组! 200分高分求助!!用多级指针和指针数组实现一个3*4的二维数组,求数组中所有元素的和及平均值 怎么声明一个动态的数组,数组的元素是指向数组的指针? 运用指向数组的指针,求一数组中所有元素之和 用c语言编写:从键盘输入10个数存入数组a中,统计数组下标是奇数且数组元素值为偶数的元素个数 用VC++编写一个程序用冒泡排序法,对一个一维数组进行排序,在排序过程中要求用指针提取数组元素